package com.circ2disease.mapper.mybatis;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.circ2disease.pojo.CircRNA;
import com.circ2disease.pojo.CircRNA_table;
import com.circ2disease.pojo.Disease;
import com.circ2disease.pojo.RelationEneity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


/*该类所有列表查询全部完成mybatisplus分页
* 调用时应加入page参数  若不需要分页操作则将page的size属性设置为-1（每页数据无限大）*/
@Mapper
@Repository
public interface CircRNAMapper {

    /**
     * 添加新的rna节点
     *
     * @param circRNA 需要添加的rna
     * @return 操作影响行数
     */
    Integer addCircRNA(@Param("circRNA") CircRNA circRNA);


    /**
     * 添加新的rnaTable
     *
     * @param circTable 需要添加的rna疾病关系表
     * @return 操作影响行数
     */
    Integer addTable(@Param("circTable") CircRNA_table circTable);

    /**
     * 添加别名
     *
     * @param rnaid     需要别名添加的rna的id
     * @param aliasName 需要添加的别名
     * @return 操作影响行数
     */
    Integer addAlias(@Param("rnaid") Integer rnaid, @Param("AliasName") String aliasName);


    /**
     * 获取所有关系表（原： List<CircRNA_table> listsimpleTable();）
     *
     *
     */
    IPage<CircRNA_table> listsimpleTable(Page<CircRNA_table> page);

    IPage<CircRNA_table> listTable(Page<CircRNA_table> page);


    /**
     * 查询所有疾病(原： List<Disease> listDisease())
     *
     * @return 库中所有疾病页
     */
    IPage<Disease> listDisease(Page<Disease> page);


    /**
     * 查询所有rna(非关系表)(原： List<CircRNA> listCircRNA())
     *
     * @return 返回所有rna
     */
    IPage<CircRNA> listCircRNA(Page<CircRNA> page);



    /**
     * 根据rnaid获取rna名
     *
     * @param id rnaid
     * @return rna名
     */
    String getRNANameById(@Param("rnaId") Integer id);


    /**
     * 根据rna名称查询rna的id
     *
     * @param aliasName rna名称,可以是别名
     * @return 返回rna的id
     */
    Integer getRNAidByName(@Param("aliasName") String aliasName);





    /**
     * 根据rna的id查询关系表(原： List<CircRNA_table> getTableByid(@Param("id") Integer id))
     *
     * @param id 要查询的rna的id
     * @return 返回所有关系表(结果可能不唯一)
     */
    IPage<CircRNA_table> getTableByid(Page<CircRNA_table> page,@Param("id") Integer id);


    /**
     * 根据疾病查询所有关系表(原：List<CircRNA_table> getTableByDisease(@Param("Disease") Disease disease);)
     *
     * @param disease 待查询疾病
     * @return 返回所有关系表(结果可能不唯一)
     */
    IPage<CircRNA_table> getTableByDisease(Page<CircRNA_table> page,@Param("Disease") Disease disease);

    /**
     * 通过疾病名获取简单的关系信息,做浏览用（List<CircRNA_table> getSimpleTableByDisease(@Param("Disease") Disease Disease);）
     *
     * @param Disease 待查疾病
     * @return 所有关系表(简单数据, 做浏览用)
     */
    IPage<CircRNA_table> getSimpleTableByDisease(Page<CircRNA_table> page,@Param("Disease") Disease Disease);


    /**
     * 根据rna的id查询简单关系表
     *
     * @param id 要查询的rna的id
     * @return 返回所有关系表(结果可能不唯一, 简化数据, 做浏览用)
     */
    IPage<CircRNA_table> getSimpleTableByrnaid(Page<CircRNA_table> page, @Param("id") Integer id);


    /**
     * 根据关系表id查询详细信息(结果唯一)
     *
     * @param Tableid 关系表id
     * @return 唯一关系表
     */
    CircRNA_table getTableByTableId(@Param("Tableid") Integer Tableid);


    CircRNA_table getByCircRNANameAndDiseaseName(String RNAName,String DiseaseName);



    /**
     * 分页查询（mybatisPlus 用法：将page对象传入即可，在mapper.xml文件中不需要处理这个page对象，mybatis会自行处理）
     *
     * @param disease 待查询疾病
     * @return 返回所有关系表(结果可能不唯一)
     */
    IPage<CircRNA_table> getTableByDiseasepage(Page<CircRNA_table> page, @Param("Disease") Disease disease);


    /*查询所有rna与疾病关系实体*/
    List<RelationEneity> listRelationEneity();

    /*查询某一疾病关联的所有rna*/
    List<RelationEneity> listRelationEneityByDisease(@Param("diseaseName") String diseaseName);

    /*查询某一rna关联的所有疾病*/
    List<RelationEneity> listRelationEneityByRna(@Param("rnaName") String rnaName);




}
